package org.pb.basic.utils;

import org.pb.user.domain.LoginInfo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

/**
 * 获取到登陆上下文信息的工具类
 * @author pb
 */
public class LoginContextUtils {

    /**
     * 获取到登陆用户信息的方法
     * @param request 前端发送的请求对象
     * @return 返回得到的登录用户信息内容。
     */
    public static LoginInfo getLoginInfo(HttpServletRequest request) {
        // 通过http请求对象获取到项目的上下文对象
        ServletContext context = request.getServletContext();
        // 通过项目上下文对象获取到spring对象,使用webApplicationContextUtils工具类调用getApplicationContext方法获取
        WebApplicationContext application = WebApplicationContextUtils.getWebApplicationContext(context);
        // 通过spring项目容器对象获取到spring管理的redis模板实例
        RedisTemplate redisTemplate = application.getBean("redisTemplate", RedisTemplate.class);
        // 先获取到请求头中的token实例
        String token = request.getHeader("token");
        // 如果token不为空，则获取到redis中存入的对应的内容
        if (token != null) {
            LoginInfo loginInfo = (LoginInfo)redisTemplate.opsForValue().get(token);
            // 返回得到的登录用户信息
            return loginInfo;
        }
        // 如果token为空，则返回null
        return null;
    }

}
